import time
import cv2
import dxcam
import numpy as np
 
# 定义一个函数，用于显示帧数据
def main():
    last_center = (0, 0)
    cam = dxcam.create(output_idx=0, output_color="BGR")
    cam.start(region=(1625, 36, 1894, 267), target_fps=60, video_mode=True)
    while True:
        #读取big2图片
        big = cv2.imread('big2.jpg',0)
        big2 = big.copy()
        #
        #读取cam.get_latest_frame()获得的帧数据，并numpy化
        img = np.array(cam.get_latest_frame())
        #获得灰度图
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        #将灰度图二值化
        threshold_value, template = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)   
         
        #获得模版的宽高
        w, h = template.shape[::-1]
        #执行模版匹配，使用cv.TM_SQDIFF方法
        res = cv2.matchTemplate(big2,template,cv2.TM_SQDIFF)
        #获得匹配结果中的最小值、最大值、最小值坐标、最大值坐标
        min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
        #获得最小值坐标
        top_left = min_loc
        #获得最小值的右下角坐标
        bottom_right = (top_left[0] + w, top_left[1] + h)
        #获得矩形框中心点坐标
        center = (top_left[0] + w/2, top_left[1] + h/2)
        #随着移动，打印矩形框中心点坐标,如果中心坐标未改变数值，则不打印
        if center != last_center:
            print(center)
            last_center = center
         
 
        #在原图上画矩形
        cv2.rectangle(big,top_left, bottom_right, 255, 2)
        #调整窗口大小
        cv2.namedWindow('image', cv2.WINDOW_NORMAL)
        #调整窗口大小
        cv2.resizeWindow('image', 480, 584)
        #显示图像
        cv2.imshow('image',template)
        #按下q键退出
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
        #打印每帧的时间
    cam.stop()
    cv2.destroyAllWindows()
    # 释放资源
    cam.release()
 
# 创建一个 dxcam 实例，用于录屏
if __name__ == '__main__':
    main()